package cn.schoolwow.quickdao.module.common.operation.kit;

import cn.schoolwow.quickdao.domain.QuickDAOConfig;
import cn.schoolwow.quickdao.domain.database.parent.RealTimePrintStatementOption;
import cn.schoolwow.quickdao.domain.entity.Entity;
import cn.schoolwow.quickdao.domain.entity.Property;
import cn.schoolwow.quickdao.domain.provider.DatabaseProvider;

import javax.sql.DataSource;
import java.util.Map;

/**公共查询选项*/
public interface CommonDatabaseOption {
    /**
     * 获取连接池
     */
    DataSource getDataSource();

    /**
     * 获取扫描的所有实体类信息
     */
    Map<String, Entity> getEntityMap();

    /**
     * 获取实体类表
     *
     * @param clazz 实体类
     */
    Entity getEntity(Class clazz);

    /**
     * 获取实体类表
     *
     * @param tableName 数据库表名
     */
    Entity getEntity(String tableName);

    /**
     * 获取实体类表字段
     *
     * @param clazz 实体类
     * @param fieldName 字段名
     */
    Property getEntityProperty(Class clazz, String fieldName);

    /**
     * 获取数据库提供者
     */
    DatabaseProvider getDatabaseProvider();

    /**
     * 获取配置信息
     */
    QuickDAOConfig getQuickDAOConfig();

    /**
     * 是否记录流程日志
     * */
    void recordFlowLog(boolean recordFlowLog);

    /**
     * 是否记录SQL日志
     * */
    void recordSqlLog(boolean recordSqlLog);

    /**
     * 开启记录模式
     * */
    void startRecord();

    /**
     * 添加记录信息
     * */
    void addRecordString(String message);

    /**
     * 停止记录模式
     * @return 返回记录SQL语句
     * */
    String stopRecord();

    /**
     * 实时输出SQL日志
     * @return 返回记录SQL语句
     * */
    void realTimePrintStatement(RealTimePrintStatementOption realTimePrintStatementOption);

    /**
     * 是否开启调试模式
     * */
    void debug(boolean debug);
}
